package com.shujia.scala

object Demo25Fun {
  def main(args: Array[String]): Unit = {

    /**
      *
      * 面向函数编程   将函数传来传去
      * 需要限制函数的类型   函数的类型和参数类型有关和返回值类型有关
      *
      */

    //fun1是一个参数为String  返回值为Int类型的函数
    def fun1(str: String): Int = {
      return str.toInt
    }

    /**
      * 函数的简写
      * 1、如果函数没有参数括号可以不写
      * 2、如果函数内容只有一行大括号可以不写
      * 3、函数的返回值类型可以不写   会自动推断
      * 4、如果最后一行作为返回值 return可以不写
      */
    def fun2(str: String) = str.toInt

    println(fun2("12"))


    /**
      * 高阶函数
      * 1、以函数作为参数   在调用一个函数的时候需要传入一个函数
      * 2、以函数作为返回值
      *
      */

    def fun3(f: () => Unit) = {

      println(1)

      //调用传进来的函数
      f()

      println(5)

    }

    def fun4(): Unit = {
      println(2)
      println(3)
      println(4)
    }

    fun3(fun4)

  }

}
